The simplest way I know to constrain the movement is to apply basic geometrical principles. For example, consider a vertex at position x=5, y=6, and z=8. If I want to move it to a location at 45 degrees relative to the x and y axes, I will need the vertex moved to (6, 7, 8), so that the difference in the position of the new location relative to the x axis is exactly equal to the difference in the position of the new location relative to the y axis. This is most easily managed in the transform panel of the properties shelf in edit mode: in the data entry boxes named X and Y, add the same value to the value in each box. This is the simplest way I have found to move the vertex. It might seem that one could also use the G key, but because of how this key works, the movement would be relative, instead of absolute, that is to say, using the sequence G - X value to effect the movement along the x axis followed by the sequence G - Y value to effect the movement along the y axis, where value is exactly the same in both instances, may not have the desired effect. The location relative to the third axis, in this case, z, can be accomplished by adding one more step: in the data entry box named Z, add the same value to the value in that box as was added to the X and Y boxes.
This also works in object mode: you can constrain the change of location of an object by moving it the exact same distance along the x and y axes by adding the same value to the X and Y boxes in the location section of the Transform panel in the Properties shelf, and change the location to 45 degrees relative to all three axes by also changing the value in the box labeled Z.
If you're dealing with more complex elements than a single vertex, it may be necessary to use other, more advanced techniques using the rotation transformation, changing the pivot points, changing the location of the 3D cursor, or the origin, and changing the current transformation space.